| @@ -275,6 +275,7 @@ urlpatterns += [ | ||
| 275 | 275 | urlpatterns += [ | 
| 276 | 276 | url(r'^get_limit_scene_qrcode_url$', wx_views.get_limit_scene_qrcode_url, name='get_limit_scene_qrcode_url'), | 
| 277 | 277 | url(r'^get_wxa_code$', wxa_views.get_wxa_code, name='get_wxa_code'), | 
| 278 | + url(r'^get_wxa_code_scene$', wxa_views.get_wxa_code_scene, name='get_wxa_code_scene'), | |
| 278 | 279 | ] | 
| 279 | 280 |  | 
| 280 | 281 | urlpatterns += [ | 
| @@ -5,6 +5,7 @@ from django_response import response | ||
| 5 | 5 | from pywe_storage import RedisStorage | 
| 6 | 6 | from pywe_wxa_qrcode import get_wxa_code_unlimit | 
| 7 | 7 |  | 
| 8 | +from miniapp.models import SceneInfo | |
| 8 | 9 | from utils.qiniucdn import qiniu_file_url, upload | 
| 9 | 10 | from utils.redis.connect import r | 
| 10 | 11 |  | 
| @@ -16,18 +17,38 @@ def get_wxa_code(request): | ||
| 16 | 17 |      scene = request.POST.get('scene', '') | 
| 17 | 18 |      page = request.POST.get('page', '') | 
| 18 | 19 |  | 
| 20 | + si, created = SceneInfo.objects.get_or_create(scene=scene, page=page, status=True) | |
| 21 | + | |
| 22 | + if si.qiniu_url: | |
| 23 | +        return response(data={ | |
| 24 | + 'qiniu_url': si.qiniu_url, | |
| 25 | + }) | |
| 26 | + | |
| 19 | 27 |      wxcfg = WECHAT.get('MINIAPP', {}) | 
| 20 | 28 |  | 
| 21 | 29 |      appid = wxcfg.get('appID') | 
| 22 | 30 |      secret = wxcfg.get('appsecret') | 
| 23 | 31 |  | 
| 24 | - res = get_wxa_code_unlimit(scene, page, res_to_base64=False, appid=appid, secret=secret, storage=RedisStorage(r)) | |
| 32 | + res = get_wxa_code_unlimit(si.sid, page, res_to_base64=False, appid=appid, secret=secret, storage=RedisStorage(r)) | |
| 25 | 33 |  | 
| 26 | 34 |      if res.headers and res.headers.get('Content-disposition'): | 
| 27 | 35 | qiniu_url = qiniu_file_url(upload(res.content)) | 
| 28 | 36 | else: | 
| 29 | 37 | qiniu_url = '' | 
| 30 | 38 |  | 
| 39 | + si.qiniu_url = qiniu_url | |
| 40 | + si.save() | |
| 41 | + | |
| 31 | 42 |      return response(data={ | 
| 32 | 43 | 'qiniu_url': qiniu_url, | 
| 33 | 44 | }) | 
| 45 | + | |
| 46 | + | |
| 47 | +def get_wxa_code_scene(request): | |
| 48 | +    sid = request.POST.get('sid', '') | |
| 49 | + | |
| 50 | + scene = SceneInfo.objects.get(sid=sid, status=True) | |
| 51 | + | |
| 52 | +    return response(data={ | |
| 53 | + 'scene': scene.scene, | |
| 54 | + }) | 
| @@ -0,0 +1,18 @@ | ||
| 1 | +# Generated by Django 3.2.16 on 2022-10-27 14:30 | |
| 2 | + | |
| 3 | +from django.db import migrations, models | |
| 4 | + | |
| 5 | + | |
| 6 | +class Migration(migrations.Migration): | |
| 7 | + | |
| 8 | + dependencies = [ | |
| 9 | +        ('member', '0048_merge_20221027_2056'), | |
| 10 | + ] | |
| 11 | + | |
| 12 | + operations = [ | |
| 13 | + migrations.AlterField( | |
| 14 | + model_name='memberactivityinfo', | |
| 15 | + name='limit_image_num', | |
| 16 | + field=models.IntegerField(default=0, help_text='限制图片数量', verbose_name='limit_image_num'), | |
| 17 | + ), | |
| 18 | + ] | 
| @@ -1,4 +1,13 @@ | ||
| 1 | +# -*- coding: utf-8 -*- | |
| 2 | + | |
| 1 | 3 | from django.contrib import admin | 
| 2 | 4 |  | 
| 5 | +from miniapp.models import SceneInfo | |
| 6 | + | |
| 7 | + | |
| 8 | +class SceneInfoAdmin(admin.ModelAdmin): | |
| 9 | +    list_display = ('sid', 'scene', 'page', 'qiniu_url', 'status', 'created_at', 'updated_at') | |
| 10 | +    list_filter = ('status', ) | |
| 11 | + | |
| 3 | 12 |  | 
| 4 | -# Register your models here. | |
| 13 | +admin.site.register(SceneInfo, SceneInfoAdmin) | 
| @@ -0,0 +1,33 @@ | ||
| 1 | +# -*- coding: utf-8 -*- | |
| 2 | +# Generated by Django 3.2.16 on 2022-10-27 14:30 | |
| 3 | + | |
| 4 | +from django.db import migrations, models | |
| 5 | +import shortuuidfield.fields | |
| 6 | + | |
| 7 | + | |
| 8 | +class Migration(migrations.Migration): | |
| 9 | + | |
| 10 | + initial = True | |
| 11 | + | |
| 12 | + dependencies = [ | |
| 13 | + ] | |
| 14 | + | |
| 15 | + operations = [ | |
| 16 | + migrations.CreateModel( | |
| 17 | + name='SceneInfo', | |
| 18 | + fields=[ | |
| 19 | +                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), | |
| 20 | +                ('status', models.BooleanField(default=True, help_text='Status', verbose_name='status')), | |
| 21 | +                ('created_at', models.DateTimeField(auto_now_add=True, help_text='Create Time', verbose_name='created_at')), | |
| 22 | +                ('updated_at', models.DateTimeField(auto_now=True, help_text='Update Time', verbose_name='updated_at')), | |
| 23 | +                ('sid', shortuuidfield.fields.ShortUUIDField(blank=True, db_index=True, editable=False, help_text='Sid', max_length=22, null=True, unique=True)), | |
| 24 | +                ('scene', models.CharField(blank=True, help_text='Scene', max_length=255, null=True, verbose_name='scene')), | |
| 25 | +                ('page', models.CharField(blank=True, help_text='Page', max_length=255, null=True, verbose_name='page')), | |
| 26 | +                ('qiniu_url', models.CharField(blank=True, help_text='七牛链接', max_length=255, null=True, verbose_name='qiniu_url')), | |
| 27 | + ], | |
| 28 | +            options={ | |
| 29 | + 'verbose_name': 'Scene', | |
| 30 | + 'verbose_name_plural': 'Scene', | |
| 31 | + }, | |
| 32 | + ), | |
| 33 | + ] | 
| @@ -1,4 +1,24 @@ | ||
| 1 | +# -*- coding: utf-8 -*- | |
| 2 | + | |
| 1 | 3 | from django.db import models | 
| 4 | +from django.utils.translation import ugettext_lazy as _ | |
| 5 | +from django_models_ext import BaseModelMixin | |
| 6 | +from shortuuidfield import ShortUUIDField | |
| 7 | + | |
| 8 | + | |
| 9 | +class SceneInfo(BaseModelMixin): | |
| 10 | + sid = ShortUUIDField(_(u'sid'), max_length=32, blank=True, null=True, help_text=u'Sid', db_index=True, unique=True) | |
| 11 | + scene = models.CharField(_(u'scene'), max_length=255, blank=True, null=True, help_text=u'Scene') | |
| 12 | + page = models.CharField(_(u'page'), max_length=255, blank=True, null=True, help_text=u'Page') | |
| 13 | + qiniu_url = models.CharField(_(u'qiniu_url'), max_length=255, blank=True, null=True, help_text=u'七牛链接') | |
| 14 | + | |
| 15 | + class Meta: | |
| 16 | + verbose_name = _(u'Scene') | |
| 17 | + verbose_name_plural = _(u'Scene') | |
| 2 | 18 |  | 
| 19 | + unique_together = ( | |
| 20 | +        ('scene', 'page'), | |
| 21 | + ) | |
| 3 | 22 |  | 
| 4 | -# Create your models here. | |
| 23 | + def __unicode__(self): | |
| 24 | + return '%d' % self.pk |